Skip to content

build(deps): Bump hoobio/pipeline-tools from 1.5.0 to 2.2.1#31

Merged
hoobio merged 1 commit into
mainfrom
dependabot/github_actions/hoobio/pipeline-tools-2.2.1
May 28, 2026
Merged

build(deps): Bump hoobio/pipeline-tools from 1.5.0 to 2.2.1#31
hoobio merged 1 commit into
mainfrom
dependabot/github_actions/hoobio/pipeline-tools-2.2.1

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github May 23, 2026

Bumps hoobio/pipeline-tools from 1.5.0 to 2.2.1.

Release notes

Sourced from hoobio/pipeline-tools's releases.

v2.2.1

2.2.1 (2026-05-23)

Bug Fixes

  • sbom: chmod + chown output after docker scans (fix Access denied downstream) (#28) (6353ded)

v2.2.0

2.2.0 (2026-05-23)

Features

  • bun lockfile SBOM support + DT findings PR gate (GH + ADO) (#26) (f9e3a35)

v2.1.0

2.1.0 (2026-05-21)

Features

  • dt: auto-migrate v1 ci/<X> legacies + channel-aware prune defaults (#23) (90002c8)

v2.0.0

2.0.0 (2026-05-21)

⚠ BREAKING CHANGES

  • consolidate SBOM build behind Build-CycloneDxSbom.ps1 and enforce hierarchy (#21)

Features

  • consolidate SBOM build behind Build-CycloneDxSbom.ps1 and enforce hierarchy (#21) (c2c1996)

v1.6.0

1.6.0 (2026-05-03)

Features

  • ado: add SBOM upload templates for Azure DevOps (#19) (282f044)
Changelog

Sourced from hoobio/pipeline-tools's changelog.

2.2.1 (2026-05-23)

Bug Fixes

  • sbom: chmod + chown output after docker scans (fix Access denied downstream) (#28) (6353ded)

2.2.0 (2026-05-23)

Features

  • bun lockfile SBOM support + DT findings PR gate (GH + ADO) (#26) (f9e3a35)

2.1.0 (2026-05-21)

Features

  • dt: auto-migrate v1 ci/<X> legacies + channel-aware prune defaults (#23) (90002c8)

2.0.0 (2026-05-21)

⚠ BREAKING CHANGES

  • consolidate SBOM build behind Build-CycloneDxSbom.ps1 and enforce hierarchy (#21)

Features

  • consolidate SBOM build behind Build-CycloneDxSbom.ps1 and enforce hierarchy (#21) (c2c1996)

1.6.0 (2026-05-03)

Features

  • ado: add SBOM upload templates for Azure DevOps (#19) (282f044)
Commits
  • ba93169 chore(main): release 2.2.1 (#29)
  • 6353ded fix(sbom): chmod + chown output after docker scans (fix Access denied downstr...
  • 6867467 chore(main): release 2.2.0 (#27)
  • f9e3a35 feat: bun lockfile SBOM support + DT findings PR gate (GH + ADO) (#26)
  • 90ff21e fix: ADO mark-latest skipped when callers pass runtime variables (#25)
  • 323b420 chore(main): release 2.1.0 (#24)
  • 90002c8 feat(dt): auto-migrate v1 ci/<X> legacies + channel-aware prune defaults (#23)
  • 6ed1f40 chore(main): release 2.0.0 (#22)
  • c2c1996 feat!: consolidate SBOM build behind Build-CycloneDxSbom.ps1 and enforce hier...
  • 25ffab8 chore(main): release 1.6.0 (#20)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [hoobio/pipeline-tools](https://github.com/hoobio/pipeline-tools) from 1.5.0 to 2.2.1.
- [Release notes](https://github.com/hoobio/pipeline-tools/releases)
- [Changelog](https://github.com/hoobio/pipeline-tools/blob/main/CHANGELOG.md)
- [Commits](hoobio/pipeline-tools@v1.5.0...v2.2.1)

---
updated-dependencies:
- dependency-name: hoobio/pipeline-tools
  dependency-version: 2.2.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code labels May 23, 2026
@hoobio hoobio merged commit afe3e45 into main May 28, 2026
11 checks passed
@dependabot dependabot Bot deleted the dependabot/github_actions/hoobio/pipeline-tools-2.2.1 branch May 28, 2026 06:21
hoobio added a commit that referenced this pull request May 28, 2026
PR #31 bumped hoobio/pipeline-tools from v1.5.0 to v2.2.1 without updating
the SBOM job to v2's API. v1 took a single `channel: ci/<branch>` string;
v2 splits it into `channel: ci` + `sub-channel: <branch>`, and the bootstrap
now treats any `<component>@ci/<X>` project it finds as a legacy v1 entry
that needs migrating out. With the v1-style channel still in place, the
bootstrap was creating `earmark-app@ci/<branch>`, then the migration sweep
immediately rewrote and deleted it, then the upload step 404'd on the
missing parent.

Switch the resolver to emit channel + sub-channel separately, promote the
default branch (main) to top-level (`earmark-app@main`, sibling of release)
instead of nesting it under ci, and pass the new sub-channel + default-branch
inputs to the upload action. Effective parent name (sub-channel if set, else
channel) is exposed as a separate output so the project-tag value stays
aligned with the new v2 hierarchy.
hoobio added a commit that referenced this pull request May 28, 2026
## Summary

Replaces the Home placeholder in the nav rail with a full Devices page
that lists every active audio endpoint as a live card. Each card
surfaces the device's current peak level on a dB-accurate sectioned
meter, a master volume slider that doubles as a mute control, a
hide/show toggle, and a compact summary of every rule that touches the
device. Clicking a rule chip jumps to the Rules page with that rule
expanded and scrolled into view. Plus rule-condition support for
"Application running" / "Application not running", external mute
reconciliation with Windows toast notifications naming the locking rule,
Ctrl+Z undo across hide/show, volume drags, and mute toggles, and
persistent window sizing.

## Changes

- New **Devices page** (`HomePage` + `HomeViewModel` + `DeviceCard` +
`DeviceRulesSummary`) with custom `WrapByRowLayout` so chevron-expanded
cards grow alone without dragging their row mates with them.
- **Peak meter** (`PingPlayer` swapped to Windows system WAV; sectioned
bar at -12 / -6 / 0 dBFS thresholds with gradient transitions; peak-hold
marker with 1.5 s latch + decay; log-scaled across -60 to 0 dBFS).
- **Auto-mute on 0 % volume, auto-unmute on drag** with rule lock
honoured.
- **Rule conditions**: `ApplicationRunning` / `ApplicationNotRunning`
types in `RuleCondition`; `IRuleMatcher.ConditionsMet` now takes
sessions; `RuleEvaluator` updated.
- **External mute reconciliation**: per-device
`AudioEndpointVolume.OnVolumeNotification` subscriptions in
`AudioEndpointService` raise `ExternalMuteChanged`; `HomeViewModel`
snaps the device back to the rule''s target and fires a
`Microsoft.Windows.AppNotifications` toast naming the locking rule
(rate-limited per device). 250 ms poll kept as fallback.
- **Ctrl+Z undo** for `VisibilityUndo` (hide/show) and `VolumeMuteUndo`
(slider drag and mute icon click).
- **Window size persisted** to `AppSettings.WindowWidth` /
`WindowHeight`, restored via `AppWindow.Resize` on `Attach`.
- **WaveLink snapshot equality** fixed (`ReferenceEquals` -> structural
compare) so `SnapshotChanged` no longer fires every 5 s poll.
- **Title bar** renamed to "Audio rules engine"; per-page subtext lines
collapsed into info-icon tooltips.
- **CLAUDE.md -> AGENTS.md** rename plus a new "Reactivity preferences"
section documenting event-driven-first, polling-as-fallback.

## Follow-up commits (review pass)

- **`fix(rules)`**: volume / mute rules targeting a capture device
(microphone) were being classified `Idle` by the evaluator because
`EffectiveFlow` defaults to `Render` for those action types. The applier
was correctly muting the mic, but `DeviceRulesSummary` then cleared
`IsMuteLockedByRule`, the card''s mute icon stayed clickable, the user
could unmute, and `ApplyExternalMute` had no rule target to reconcile
against. Added `MatchEndpointAnyFlow` and used it for `SetDeviceVolume`
/ `MuteDevice` / `UnmuteDevice`.
- **`perf(audio)`**: `GetPeakLevel` now reuses the long-lived `MMDevice`
already held by the mute subscription, instead of allocating a fresh COM
wrapper on every 50 ms poll.
- **`refactor(home)`**: pulled the capped undo LIFO out of
`HomeViewModel` into its own `DeviceUndoStack`. The previous in-line
trim re-stacked the whole stack to drop the oldest entry; `LinkedList`
makes that an O(1) `RemoveFirst`. Also renamed `MasonryLayout.cs` to
match its only class, `WrapByRowLayout`.
- **`ci(sbom)`**: the SBOM job was still using v1''s single `channel:
ci/<branch>` input after the `pipeline-tools` v1 -> v2 bump in #31. v2
requires `channel: ci` + `sub-channel: <branch>` (or `channel:
<default-branch>` for main), and the bootstrap migration was deleting
the just-created upload parent on every run. Switched to the v2 channel
+ sub-channel pattern.
- **`docs(readme)`**: replaced the single hero image with separate
Devices / Rules screenshots.

## Testing

- [x] Manual testing on Windows 11 host (build 26200)
- [x] Tail of the latest log file shows expected `Applied rule ...`
lines after launch
- [ ] Unit tests added/updated under `tests/Earmark.Core.Tests`
- [x] Existing tests pass (`dotnet test -p:Platform=x64`)

## Checklist

- [x] PR title follows Conventional Commits
- [x] Code builds without warnings (`dotnet build
src/Earmark.App/Earmark.App.csproj -c Debug -p:Platform=x64`)
- [x] No emoji / gitmoji in commit messages or PR title
- [x] Architecture boundary respected: `Earmark.Core` stays UI-free;
Windows / NAudio interop in `Earmark.Audio`; UI / VMs / settings in
`Earmark.App`
- [x] AGENTS.md updated (rename + reactivity section)

feat(rules): add ApplicationRunning and ApplicationNotRunning conditions
feat(audio): reconcile external mute changes via AudioEndpointVolume
notifications and fire a Windows toast naming the locking rule
feat(home): Ctrl+Z undo for hide / show, volume drags and mute toggles
feat(home): persist window size across launches
feat(ui): replace per-page subtext lines with info-icon tooltips
fix(rules): mark volume / mute rules targeting capture devices as Active
perf(audio): reuse cached MMDevice for peak-level reads to avoid
per-tick COM activations
chore: rename CLAUDE.md to AGENTS.md and document event-driven
reactivity preference
hoobio added a commit that referenced this pull request May 28, 2026
## Summary

Replaces the Home placeholder in the nav rail with a full Devices page
that lists every active audio endpoint as a live card. Each card
surfaces the device's current peak level on a dB-accurate sectioned
meter, a master volume slider that doubles as a mute control, a
hide/show toggle, and a compact summary of every rule that touches the
device. Clicking a rule chip jumps to the Rules page with that rule
expanded and scrolled into view. Plus rule-condition support for
"Application running" / "Application not running", external mute
reconciliation with Windows toast notifications naming the locking rule,
Ctrl+Z undo across hide/show, volume drags, and mute toggles, and
persistent window sizing.

## Changes

- New **Devices page** (`HomePage` + `HomeViewModel` + `DeviceCard` +
`DeviceRulesSummary`) with custom `WrapByRowLayout` so chevron-expanded
cards grow alone without dragging their row mates with them.
- **Peak meter** (`PingPlayer` swapped to Windows system WAV; sectioned
bar at -12 / -6 / 0 dBFS thresholds with gradient transitions; peak-hold
marker with 1.5 s latch + decay; log-scaled across -60 to 0 dBFS).
- **Auto-mute on 0 % volume, auto-unmute on drag** with rule lock
honoured.
- **Rule conditions**: `ApplicationRunning` / `ApplicationNotRunning`
types in `RuleCondition`; `IRuleMatcher.ConditionsMet` now takes
sessions; `RuleEvaluator` updated.
- **External mute reconciliation**: per-device
`AudioEndpointVolume.OnVolumeNotification` subscriptions in
`AudioEndpointService` raise `ExternalMuteChanged`; `HomeViewModel`
snaps the device back to the rule''s target and fires a
`Microsoft.Windows.AppNotifications` toast naming the locking rule
(rate-limited per device). 250 ms poll kept as fallback.
- **Ctrl+Z undo** for `VisibilityUndo` (hide/show) and `VolumeMuteUndo`
(slider drag and mute icon click).
- **Window size persisted** to `AppSettings.WindowWidth` /
`WindowHeight`, restored via `AppWindow.Resize` on `Attach`.
- **WaveLink snapshot equality** fixed (`ReferenceEquals` -> structural
compare) so `SnapshotChanged` no longer fires every 5 s poll.
- **Title bar** renamed to "Audio rules engine"; per-page subtext lines
collapsed into info-icon tooltips.
- **CLAUDE.md -> AGENTS.md** rename plus a new "Reactivity preferences"
section documenting event-driven-first, polling-as-fallback.

## Follow-up commits (review pass)

- **`fix(rules)`**: volume / mute rules targeting a capture device
(microphone) were being classified `Idle` by the evaluator because
`EffectiveFlow` defaults to `Render` for those action types. The applier
was correctly muting the mic, but `DeviceRulesSummary` then cleared
`IsMuteLockedByRule`, the card''s mute icon stayed clickable, the user
could unmute, and `ApplyExternalMute` had no rule target to reconcile
against. Added `MatchEndpointAnyFlow` and used it for `SetDeviceVolume`
/ `MuteDevice` / `UnmuteDevice`.
- **`perf(audio)`**: `GetPeakLevel` now reuses the long-lived `MMDevice`
already held by the mute subscription, instead of allocating a fresh COM
wrapper on every 50 ms poll.
- **`refactor(home)`**: pulled the capped undo LIFO out of
`HomeViewModel` into its own `DeviceUndoStack`. The previous in-line
trim re-stacked the whole stack to drop the oldest entry; `LinkedList`
makes that an O(1) `RemoveFirst`. Also renamed `MasonryLayout.cs` to
match its only class, `WrapByRowLayout`.
- **`ci(sbom)`**: the SBOM job was still using v1''s single `channel:
ci/<branch>` input after the `pipeline-tools` v1 -> v2 bump in #31. v2
requires `channel: ci` + `sub-channel: <branch>` (or `channel:
<default-branch>` for main), and the bootstrap migration was deleting
the just-created upload parent on every run. Switched to the v2 channel
+ sub-channel pattern.
- **`docs(readme)`**: replaced the single hero image with separate
Devices / Rules screenshots.

## Testing

- [x] Manual testing on Windows 11 host (build 26200)
- [x] Tail of the latest log file shows expected `Applied rule ...`
lines after launch
- [ ] Unit tests added/updated under `tests/Earmark.Core.Tests`
- [x] Existing tests pass (`dotnet test -p:Platform=x64`)

## Checklist

- [x] PR title follows Conventional Commits
- [x] Code builds without warnings (`dotnet build
src/Earmark.App/Earmark.App.csproj -c Debug -p:Platform=x64`)
- [x] No emoji / gitmoji in commit messages or PR title
- [x] Architecture boundary respected: `Earmark.Core` stays UI-free;
Windows / NAudio interop in `Earmark.Audio`; UI / VMs / settings in
`Earmark.App`
- [x] AGENTS.md updated (rename + reactivity section)

---

<!-- release-please footers: one bare conventional-commit line per
extra changelog entry, separated by blank lines. -->

feat(rules): add ApplicationRunning and ApplicationNotRunning conditions

feat(audio): reconcile external mute changes via AudioEndpointVolume
notifications and fire a Windows toast naming the locking rule

feat(home): Ctrl+Z undo for hide / show, volume drags and mute toggles

feat(home): persist window size across launches

feat(ui): replace per-page subtext lines with info-icon tooltips

fix(rules): mark volume / mute rules targeting capture devices as Active

perf(audio): reuse cached MMDevice for peak-level reads to avoid
per-tick COM activations

chore: rename CLAUDE.md to AGENTS.md and document event-driven
reactivity preference
hoobio pushed a commit that referenced this pull request May 29, 2026
This PR was generated automatically by
[release-please](https://github.com/googleapis/release-please).
---


## [0.1.7](v0.1.6...v0.1.7)
(2026-05-29)


### Features

* add a setting to reconcile Wave Link device names
([0f7d12c](0f7d12c))
* add Devices page with live cards, peak meter and Ctrl+Z undo
([#32](#32))
([f7951e8](f7951e8))
* **audio:** reconcile external mute changes via AudioEndpointVolume
([f7951e8](f7951e8))
* **home:** Ctrl+Z undo for hide / show, volume drags and mute toggles
([f7951e8](f7951e8))
* **home:** match device-card icons to Wave Link mixes
([0f7d12c](0f7d12c))
* **home:** persist window size across launches
([f7951e8](f7951e8))
* **rules:** add ApplicationRunning and ApplicationNotRunning conditions
([f7951e8](f7951e8))
* **ui:** replace per-page subtext lines with info-icon tooltips
([f7951e8](f7951e8))
* **ui:** right-click menus to hide a device and enable or delete a rule
([0f7d12c](0f7d12c))
* Wave Link card theming, app theme and per-device apps row
([#34](#34))
([0f7d12c](0f7d12c))
* **wavelink:** route Wave Link input mute and volume over the WebSocket
([0f7d12c](0f7d12c))


### Bug Fixes

* **audio:** keep CoreAudio COM off the UI thread to stop hangs
([0f7d12c](0f7d12c))
* **audio:** release COM wrappers and adopt singleton view-model
lifetime ([#28](#28))
([694819e](694819e))
* **audio:** release MMDevice / AudioSessionControl wrappers and
([694819e](694819e))
* **rules:** mark volume / mute rules targeting capture devices as
Active
([f7951e8](f7951e8))


### Performance Improvements

* **audio:** reuse cached MMDevice for peak-level reads to avoid
([f7951e8](f7951e8))
* **audio:** reuse the cached MMDevice and skip no-op mute notifications
([0f7d12c](0f7d12c))


### Documentation

* **release-please:** require blank lines between footer entries
([#33](#33))
([4d21efc](4d21efc))


### Miscellaneous Chores

* rename CLAUDE.md to AGENTS.md and document event-driven
([f7951e8](f7951e8))


### Build System

* **deps:** Bump hoobio/pipeline-tools from 1.5.0 to 2.2.1
([#31](#31))
([afe3e45](afe3e45))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: release-please-hoobi[bot] <279189756+release-please-hoobi[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant